package ge.usuarios;


import ge.escola.Disciplina;
import ge.util.Data;
import ge.util.Horario;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 
 * @author Grupo 8
 *
 */

public class Professor extends Funcionario{
	
	private List<Horario> listaHorariosOcupados = new ArrayList<Horario>();
	private List<Disciplina> DisciplinasQueLeciona = new ArrayList<Disciplina>();

	public Professor(String nome, String cpf, String endereco, String telefone,
			String email, Data dataAdmissao, Data dataPosse, String foto, String cargo, List<Integer> todasMatriculas) throws Exception {
		super(nome, cpf, endereco, telefone, email, dataAdmissao, dataPosse, foto, cargo, todasMatriculas);
		
	}

	/**
	 * Adiciona um horaio
	 * @param disciplina
	 * Disciplina que ele 
	 * @param horario
	 * @throws Exception
	 */
	public void addHorario(Horario horario) throws Exception{
		if(listaHorariosOcupados.size() == 0){
			if(DisciplinasQueLeciona.contains(horario.getDisciplina()) || horario.getDisciplina() == null){
				listaHorariosOcupados.add(horario);
			}else{
				throw new Exception("O professor nao leciona esta disciplina");
				
			}
		}else{
			Iterator<Horario> iteraHorario = listaHorariosOcupados.iterator();
			Horario hora = null;



			while(iteraHorario.hasNext()){
				hora = iteraHorario.next();
				if(hora.getDia().equals(horario.getDia())){
					if(hora.getHoraI() >= horario.getHoraI()){
						if((hora.getHoraI() - horario.getHoraI()) < horario.getDuracaoAula()){
							throw new Exception ("Horario ja ocupado");
						}
					}else{
						if(horario.getHoraI() - hora.getHoraI() < horario.getDuracaoAula()){
							throw new Exception ("Horario ja ocupado");
						}
					}
				}
			}
			if(DisciplinasQueLeciona.contains(horario.getDisciplina()) || horario.getDisciplina() == null){
				listaHorariosOcupados.add(horario);
			}else{
				throw new Exception("O professor nao leciona esta disciplina");
			}
			
		}
	}
	/**
	 * Remove horario ocupado
	 * @param horario
	 * Objeto do tipo horario
	 * @throws Exception
	 */
	public void removeHorarioOcupado(Horario horario) throws Exception{
		for(int i = 0; i < listaHorariosOcupados.size(); i++){
			if(horario.toString().equals(listaHorariosOcupados.get(i).toString())){
				listaHorariosOcupados.remove(i);
			}
		}
		
	}
	/**
	 * Mostra as disciplinas que o professor leciona
	 */
	public String mostraDisciplinas(){
		String saida = "";
		for(int i = 0; i < DisciplinasQueLeciona.size(); i++){
			saida += DisciplinasQueLeciona.get(i).toString();
			
		}return saida;
	}
	/**
	 * Adiciona uma disciplina
	 * @param disciplina
	 * Objeto do tipo disciplina
	 * @throws Exception 
	 */
	public void addDisciplina(Disciplina disciplina) throws Exception{
		for(int i = 0; i < DisciplinasQueLeciona.size();i++){
			if(DisciplinasQueLeciona.get(i).equals(disciplina)){
				throw new Exception("Esta disciplina ja esta cadastrada");
			}
		}
		
		DisciplinasQueLeciona.add(disciplina);
		
	}
	/**
	 * 
	 * @return Retorna a lista de disciplinas
	 */
	public List<Disciplina> getListaDeDisciplinas(){
		return DisciplinasQueLeciona;
	}
	/**
	 * 
	 * @return a lista de horarios ocupados
	 */
	public List<Horario> getListaDeHorariosOcupados(){
		return listaHorariosOcupados;
	}
	/**
	 * Remove uma disciplina
	 * @param disciplina
	 * Objeto do tipo disciplina
	 * @throws Exception 
	 */
	public void removeDisciplina(Disciplina disciplina) throws Exception{
		for(int i = 0; i < DisciplinasQueLeciona.size(); i++){
			if(disciplina.getCodigo().equals(DisciplinasQueLeciona.get(i).getCodigo())){
				DisciplinasQueLeciona.remove(i);
				return;
			}else{
				throw new Exception("Codigo da disciplina nao existe");
			}
		}
		
	}


	
}



